#pragma once

#ifdef WIN32
#include "pthread.h"
#else
#include <pthread.h>
#endif

namespace Core
{
    /**
    *kelas untuk menciptakan mutex
    */
	class Mutex
	{
	private:
		pthread_mutex_t m_Mutex; ///nilai mutex dari kelas
		bool m_Safe;

	public:
		Mutex();
		~Mutex();
		
		/**
		* Fungsi untuk me-lock 
		*/
		void Lock();

		void TimedLock(unsigned short p_MilliSecond);
		
		/**
		* Fungsi untuk melepaskan lock dari suatu mutex
		*/
		void Unlock();

		bool Trylock();

		void Safe();
		void Unsafe();
	};
}
